package com.nuanshui.heatedloan.credit.utils;

import com.nuanshui.framework.lang.DateUtil;
import org.apache.commons.lang.StringUtils;

import java.util.Random;

/**
 * Created by wangxw on 2017/6/26.
 */
public class Sequence {
    /**
     * 生成随机数
     *
     * @param num 生成随机数的位数
     *
     * @return 返回随机数
     */
    public static String getGenerationRandom(int num){
        if(num<0){
            num = 8;
        }
        int[] array = {0,1,2,3,4,5,6,7,8,9};
        int length = array.length;
        Random rand = new Random();
        for (int i = length; i > 1; i--) {
            int index = rand.nextInt(i);
            int tmp = array[index];
            array[index] = array[i - 1];
            array[i - 1] = tmp;
        }
        StringBuilder sb = new StringBuilder();
        for(int i = 0; i < num; i++){
            sb.append(array[i]);
        }
        return sb.toString();
    }

    /**
     * 生成随机数
     *
     * @param num 生成随机数的位数
     *
     * @return 返回随机数
     */
    public static String getGenerationNum(int num){
        if(num<0){
            num = 8;
        }
        int[] array = {1,2,3,4,5,6,7,8,9};
        int length = array.length;
        Random rand = new Random();
        for (int i = length; i > 1; i--) {
            int index = rand.nextInt(i);
            int tmp = array[index];
            array[index] = array[i - 1];
            array[i - 1] = tmp;
        }
        StringBuilder sb = new StringBuilder();
        for(int i = 0; i < num; i++){
            sb.append(array[i]);
        }
        return sb.toString();
    }




    /**
     * 生成订单号
     *
     * @return yyyyMMdd+6位随机数
     */
    public static String getOrderNo(int type){
        return DateUtil.getToday("yyyyMMddHHmmss")+type+getGenerationRandom(6);
    }


    /**
     * 获取流水号(实际使用时可以自己拼接前缀)
     * 使用范例 ：  serialNo = "S"+DateUtil.getCurrentFormat() + Sequence.getSerialNo(seqNum,11,8);
     * 自增长seqNum大于digitalSize
     * @param seqNum  当自增长seqNum 大于此值时，默认截取长度（从后往前截取）
     * @param digitalSize 需要显示的位数
     * @param truncSize 截取位数
     * @return 流水号
     */
    public static String getSerialNo(String seqNum,int digitalSize,int truncSize) {

        if (seqNum != null && seqNum.length() > truncSize) {
            seqNum = StringUtils.substring(seqNum, seqNum.length() - truncSize);
        } else {
            seqNum = StringUtils.defaultString(seqNum);
        }
        return  StringUtils.leftPad(seqNum, digitalSize,"0");//不够位数，左不零
    }

    public static void main(String[] args) {
        System.out.println(DateUtil.getToday("yyyyMMddHHmmss")+getGenerationRandom(6));
    }
}
